package com.example.demo.demo.datatype;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * 保留两位小数
 *
 * @author Roger
 * @since 2021/7/25
 */
public class KeepTwoDecimalTest {
    double f = 111231.5585;
    double f1 = 66666;
    public static void main(String[] args) {
        KeepTwoDecimalTest f = new KeepTwoDecimalTest();
        f.m1();
        f.m2();
        f.m3();
        f.m4();
    }
    public void m1() {
        BigDecimal bg = new BigDecimal(f);
        //若舍入位大于等于5，则对舍入部分的前一位数字加1；若舍入位小于5，则直接舍弃。即为四舍五入模式。
        double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        //不论舍入位是否为零，都直接舍弃。即为向内取整模式。
        double f2 = bg.setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
        //舍入位为非零，则对舍入部分的前一位数字加1；若舍入位为零，则直接舍弃。即为向外取整模式
        //double f2 = bg.setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
        System.out.println(f1);
        System.out.println(f2);
    }
    /**
     * DecimalFormat转换最简便
     */
    public void m2() {
        DecimalFormat df = new DecimalFormat("#.00");
        System.out.println(df.format(f));
        System.out.println(df.format(f1));
    }
    /**
     * String.format打印最简便
     */
    public void m3() {
        System.out.println(String.format("%.2f", f));
        System.out.println(String.format("%.2f", f1));
    }

    /**
     * 使用NumberFormat,保留小数点后两位
     */
    public void m4() {
        NumberFormat nf = NumberFormat.getNumberInstance();
        //NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用
        //NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用
        //设置小数位
        nf.setMaximumFractionDigits(2);
        /*
         * setMinimumFractionDigits设置成2
         * 如果不这么做，那么当value的值是100.00的时候返回100
         * 而不是100.00
         */
        nf.setMinimumFractionDigits(2);
        nf.setRoundingMode(RoundingMode.HALF_UP);
        /*
         * 如果想输出的格式用逗号隔开，可以设置成true
         */
        nf.setGroupingUsed(false);
        System.out.println(nf.format(f));
        System.out.println(nf.format(f1));
    }

}
